package jdk8.lambda;

import org.junit.Test;

public class MainTest {

    private String name = "小明";

    @Test
    public void test(){
        VoidLambda voidLambda = () ->  {
            System.out.println("===123===");
        };
        voidLambda.get();


        String str = "123";
        GetLambda getLambda = () ->  {
//            name = "小刚";     //lambda表达式内可引用和修改外层的成员变量
            //lambda表达式引用的外层局部变量应该是被final修饰的，或者引用的外层局部变量没有被final修饰时，那么也不能够修改它的值
//            String str = "";  //lambda表达式内不允许声明与外层局部变量同名的变量
//            str = "333";      //lambda表达式内不允许更改外层局部变量的值

            String res = "Inner with ";
            res += str;
            res += name;

            return res;
        };
        System.out.println(getLambda.get());


        TestLambda testLambda = test ->  {
            name = "小刚";     //lambda表达式内可引用和修改外层的成员变量
            //lambda表达式引用的外层局部变量应该是被final修饰的，或者引用的外层局部变量没有被final修饰时，那么也不能够修改它的值
//            String str = "";  //lambda表达式内不允许声明与外层局部变量同名的变量
//            str = "333";      //lambda表达式内不允许更改外层局部变量的值

            String res = "Inner with ";
            res += str;
            res += name;
            res += test;

            return res;
        };
        System.out.println(testLambda.test("哈哈"));

        GreetingService greetService = message -> System.out.println("Hello " + message);
        greetService.sayMessage("watson");
        greetService.println();
        greetService.print();
    }

}
